#ifndef CGAME_OBJECT_H
#define CGAME_OGJECT_H

#include "CSpriteManager.h"

const size_t BLOCK_SIZE_X = 100;
const size_t BLOCK_SIZE_Y = 80;
const size_t BLOCK_SIZE_Z = 40;

class CGameObject {
public:
	CGameObject() {}
	virtual ~CGameObject() {}
	virtual bool IsMovable() const = 0;
	virtual size_t DrawPosX() const = 0;
	virtual size_t DrawPosY() const = 0;
	virtual SpriteType GetSpriteType() const = 0;
	virtual bool IsDropShadow() const = 0;
	virtual bool CanSetBlock() const = 0;
private:	
};

class CCharacter : public CGameObject {
public:
	virtual bool IsMovable() const { return false; }
	virtual size_t DrawPosX() const { return 0; }
	virtual size_t DrawPosY() const { return 0; }
	virtual SpriteType GetSpriteType() const = 0;
	virtual bool IsDropShadow() const { return false; }
	virtual bool CanSetBlock() const { return false; }
};

class CCharacterBoy : public CCharacter {
public:
	virtual SpriteType GetSpriteType() const { return CHARACTER_BOY; }
};

class CCharacterCatGirl : public CCharacter {
public:
	virtual SpriteType GetSpriteType() const { return CHARACTER_CAT_GIRL; }
};

class CCharacterHornGirl : public CCharacter {
public:
	virtual SpriteType GetSpriteType() const { return CHARACTER_HORN_GIRL; }
};

class CCharacterPinkGirl : public CCharacter {
public:
	virtual SpriteType GetSpriteType() const { return CHARACTER_PINK_GIRL; }
};

class CCharacterPrincessGirl : public CCharacter {
public:
	virtual SpriteType GetSpriteType() const { return CHARACTER_PRINCESS_GIRL; }
};

class CBlock : public CGameObject {
public:
	virtual bool IsMovable() const { return true; }
	virtual size_t DrawPosX() const { return 0; }
	virtual size_t DrawPosY() const { return 0; }
	virtual SpriteType GetSpriteType() const = 0;
	virtual bool IsDropShadow() const { return true; }
	virtual bool CanSetBlock() const { return true; }
private:	
};

class CDirtBlock : public CBlock {
public:
	virtual bool IsMovable() const { return true; }
	virtual SpriteType GetSpriteType() const { return DIRT_BLOCK; }
};

class CBrownBlock : public CBlock {
public: 
	virtual SpriteType GetSpriteType() const { return BROWN_BLOCK; }
};

class CPlainBlock : public CBlock {
public: 
	virtual SpriteType GetSpriteType() const { return PLAIN_BLOCK; }
};

class CGrassBlock : public CBlock {
public: 
	virtual SpriteType GetSpriteType() const { return GRASS_BLOCK; }
};

class CWaterBlock : public CBlock {
public: 
	virtual SpriteType GetSpriteType() const { return WATER_BLOCK; }
};

class CWoodBlock : public CBlock {
public: 
	virtual SpriteType GetSpriteType() const { return WOOD_BLOCK; }
};


#endif // CGAME_OGJECT_H
